# 1. docker之概述

# docker是什么

  1. docker是由go语言开发实现,基于linux内核的cgroup,namesqace以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,

  2. 由于隔离的进程独立于宿主机和其它的隔离的进程,因此也称其为容器

  3. 最早实现是基于LXC的,但从0.7版本后,开始去除了LXC,转而使用了自行开发的libcontainer,在1.11版本开始后,则进一步使用了runC和containerd.

  4. docker也是使用最广泛的开源容器引擎

  5. docker不是容器,它是容器引擎,并不是容器,而是创建容器

  6. docker是一种操作系统级的虚拟化技术

  7. 它是基于Linux,共享了linux内核,以及所有涉到的所有硬件资源

  8. 它本身不会虚拟硬件,只会共享使用宿主机的硬件

  9. 所以docker是在进程层面上的隔离

  10. docker依赖linux内核特性,namespace(资源隔离),cgroups(资源限制) ,来实现隔离

  11. docker也可以说是一个简单的应用程序打包工具

  12. 打包的是项目代码以及项目所使用的环境

  13. 用于保障完整性,一致性,易迁移性,标准化。

  14. docker也是一种跨平台的开源项目

# docker的基本组成

docker是由,客户端,守护进程,镜像,容器,镜像仓库为基本架构组成

  1. docker Client:客户端
  2. Ddocker Daemon:守护进程
    1. 提供一个管理工具,可以使用docker的命令来管理
    2. 也就是说,docker是C/S(客户端client-服务器server)的模式
    3. docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作后返回结果
    4. docker客户端可以连接本地或者远程的守护进程
    5. docker客户端和服务器是通过socket或RETSful API 来进行通信
  3. Docker lmages:镜像
    1. docker镜像是容器的基石,容器基于镜像启动和运行,镜像就类似于容器的源代码,保存了容器各种启动的条件
    2. 镜像也是一个层叠的只读文件系统 或 分层的只读文件系统
  4. Docker Container:容器
    1. 容器通过镜像来启动,容器是docker的执行来源,可以执行一个或多少进程
    2. 镜像也相当于构建和打包阶段
    3. 容器也相当于启动和执行阶段
    4. 容器启动时,容器可以运行,开始,停止,移动,删除。
    5. 每个容器都是独立的,安全的应用级平台
  5. Docker Registry:镜像仓库
    1. 镜像仓库是用于保存镜像,镜像仓库也分为,公有和私有仓库
    2. docker官方有提供公有仓库docker hub,网址:hub.docker.com (opens new window)
    3. 我们也可以搭建属于自己的私有仓库

以下图,来源于官方

Gxf4G8.png

# 容器跟虚拟机的区别

虚拟机是硬件级虚拟化,也可以是系统级虚拟化,需要虚拟出独立的虚拟硬件

容器是系统级虚拟化,只能在操作系统上使用,不会虚拟出虚拟硬件,它是共享宿主机本身的硬件

GxfTMQ.png

容器:创建容器就像是创建进程一样,方便,浪费资源小

虚拟机:虚拟机使用,需要虚拟出完整的系统级,启动时慢,资源比较浪费

Gxf7rj.png

# docker常见的应用场景

  1. 应用程序打包和发布
  2. 应用程序的隔离
    1. 虽然docker是进程级别的隔离,但是在一台宿主机上有多台docker容器,这多台容器是相互隔离的,不相通的。
  3. 持续集成
    1. 使用docker在持续集成方向,交付镜像进行集成
  4. 部署微服务
  5. 快速搭建测试环境
  6. 提供PaaS产品(平台即服务)
    1. 类似于,阿里云的容器云,腾讯云的容器云等